Ext.define('FTextField', {
   extend: 'Ext.form.field.Text',
   alias: 'widget.ftextfield',
   hint: 'Este é um campo de texto',
   
   /*
    * fieldWidth: comprimento do campo (apenas do campo, e não do label).
    */
   fieldWidth: null,
    
   initComponent: function() 
   {
       this.fieldCls = 'ftextfield';
       this.labelCls = 'ftextfieldlabel';
       this.readOnlyCls = 'readonly';
       this.requiredCls = 'required-field';
       
       this.fieldLabel = this.label ? this.label : this.fieldLabel;
       
       if ( this.fieldWidth )
       {
           this.fieldStyle = {width: this.fieldWidth}
       }
       
       this.callParent();
   }
});

Ext.define('FNumberField', {
   extend: 'Ext.form.field.Number',
   alias: 'widget.fnumberfield',
   hint: 'Este é um campo numérico',
   minValue: 0,
   allowDecimals: false,
   
   /*
    * fieldWidth: comprimento do campo (apenas do campo, e não do label).
    */
   fieldWidth: null,
   
   initComponent: function() 
   {
       this.fieldCls = 'ftextfield';
       this.labelCls = 'ftextfieldlabel';
       this.readOnlyCls = 'readonly';
       this.requiredCls = 'required-field';
       
       this.fieldLabel = this.label ? this.label : this.fieldLabel;
       
       if ( this.fieldWidth )
       {
           this.fieldStyle = {width: this.fieldWidth}
       }
       
       this.callParent();
   }
});

Ext.define('FFloatField', {
   extend: 'FNumberField',
   alias: 'widget.ffloatfield',
   hint: 'Este é um campo de números com ponto flutuante',
   minValue: 0,
   initComponent: function() 
   {
       this.allowDecimals = true;
       this.callParent();
   }
});

Ext.define('FDateField', {
   extend: 'Ext.form.field.Date',
   alias: 'widget.fdatefield',
   hint: 'Este é um campo de data',
   format: 'd/m/Y',
   value: new Date(),
   
   /*
    * fieldWidth: comprimento do campo (apenas do campo, e não do label).
    */
   fieldWidth: null,
   
   initComponent: function() 
   {
       this.fieldCls = 'ftextfield';
       this.labelCls = 'ftextfieldlabel';
       this.readOnlyCls = 'readonly';
       this.requiredCls = 'required-field';
       
       this.fieldLabel = this.label ? this.label : this.fieldLabel;
       this.validateOnBlur = true;
       this.validateOnChange = true;
       
       if ( this.fieldWidth )
       {
           this.fieldStyle = {width: this.fieldWidth}
       }
       
       this.callParent();
   }
});

Ext.define('FCurrencyField', {
   extend: 'FFloatField',
   alias: 'widget.fcurrencyfield',
   hint: 'Este é um campo monetário'
});
